package vip.liux.backend.adapter.web;

import org.springframework.web.bind.annotation.*;
import vip.liux.application.dots.PagedResultDto;
import vip.liux.backend.application.service.product.BrandDto;
import vip.liux.backend.application.service.product.BrandQueryDto;
import vip.liux.backend.application.service.product.BrandService;
import vip.liux.backend.application.service.product.CreateBrandDto;
import vip.liux.contracts.shared.value.Select;

import java.util.List;

@RestController
@RequestMapping("/api/brand")
public class BrandController {

    private final BrandService brandService;

    public BrandController(BrandService brandService) {
        this.brandService = brandService;
    }

    /**
     * 创建品牌
     *
     * @param brandDto 品牌数据传输对象
     * @return 创建的品牌
     */
    @PostMapping
    public BrandDto createBrand(@RequestBody CreateBrandDto brandDto) {
        return brandService.createBrand(brandDto);
    }

    @GetMapping("/page")
    public PagedResultDto<BrandDto> getBrands(BrandQueryDto queryDto) {
        return brandService.getBrands(queryDto);
    }

    /**
     * 获取所有品牌
     *
     * @return 品牌列表
     */
    @GetMapping
    public List<BrandDto> getAllBrands() {
        return brandService.getAllBrands();
    }

    @GetMapping("/options")
    public List<Select> getBrandOptions() {
        return brandService.getBrandOptions();
    }

    /**
     * 根据ID获取品牌
     *
     * @param id 品牌ID
     * @return 品牌数据传输对象
     */
    @GetMapping("/{id}")
    public BrandDto getBrandById(@PathVariable Long id) {
        return brandService.getBrandById(id);
    }

    /**
     * 更新品牌
     *
     * @param id       品牌ID
     * @param brandDto 品牌数据传输对象
     * @return 更新后的品牌
     */
    @PutMapping("/{id}")
    public BrandDto updateBrand(@PathVariable Long id, @RequestBody CreateBrandDto brandDto) {
        return brandService.updateBrand(id, brandDto);
    }

    /**
     * 删除品牌
     *
     * @param id 品牌ID
     */
    @DeleteMapping("/{id}")
    public void deleteBrand(@PathVariable Long id) {
        brandService.deleteBrand(id);
    }
}